from collections import deque

def jump(arr: list[int]) -> int:
    n = len(arr)
    # 保存中间结果: steps[i]保存到达i的最少步数
    steps = [-1] * n
    steps[0] = 0
    # BFS的核心：使用一个队列保存搜索节点
    queue = deque()
    queue.append(0)
    while queue:
        # 首先取出当前点
        i = queue.popleft()
        s = steps[i]
        # 从当前点搜索，按题意可走1-6步
        for j in range(i + 1, min(n, i + 7)):
            # 目标位置
            t = j
            # 判断是否有跳转
            if arr[t] >= 0: 
                t = arr[t]
            # BFS中第一次搜索到终点就是最优解，可以直接返回
            if t == n - 1:
                return s + 1
            # 计算结果并将目标点保存进队列
            if steps[t] < 0:
                steps[t] = s + 1
                queue.append(t)
    # 队列搜索完毕还没找到终点，说明无解
    return -1

# main
arr = [-1, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, -1]
ans = jump(arr)
print('总步数:', ans)

